package com.yt.claim.server.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yt.claim.models.dto.ClaimCreateDTO;
import com.yt.claim.models.dto.ClaimQueryDTO;
import com.yt.claim.models.dto.ClaimUpdateDTO;
import com.yt.claim.models.entity.ClaimInfoEntity;
import com.yt.claim.models.service.ClaimService;
import com.yt.claim.models.vo.ClaimVO;
import com.yt.claim.server.mapper.ClaimInfoMapper;
import org.springframework.stereotype.Service;

@Service
public class ClaimServiceImpl extends ServiceImpl<ClaimInfoMapper, ClaimInfoEntity> implements ClaimService {

    @Override
    public Integer createClaim(ClaimCreateDTO dto) {
        // 校验claimNo唯一性、材料数量等
        // 插入数据库并返回主键
        ClaimInfoEntity entity = new ClaimInfoEntity();
        // 属性映射
        entity.setPolicyId(dto.getPolicyId());
        entity.setUserId(dto.getUserId());
        entity.setClaimNo(dto.getClaimNo());
        entity.setAccidentTime(dto.getAccidentTime());
        entity.setReasonAttrId(dto.getReasonAttrId());
        entity.setHospitalName(dto.getHospitalName());
        entity.setTreatmentTime(dto.getTreatmentTime());
        entity.setDiagnosisResult(dto.getDiagnosisResult());
        entity.setTreatmentAmount(dto.getTreatmentAmount());
        entity.setBankName(dto.getBankName());
        entity.setBankAccount(dto.getBankAccount());
        entity.setAccountName(dto.getAccountName());
        entity.setClaimMaterials(dto.getClaimMaterials());
        entity.setMaterialCount(dto.getMaterialCount());
        entity.setStatusAttrId(1); // 默认待审核状态
        
        // 保存到数据库
        this.save(entity);
        
        return entity.getClaimId();
    }

    @Override
    public boolean updateClaim(ClaimUpdateDTO dto) {
        // 更新索赔信息
        ClaimInfoEntity entity = new ClaimInfoEntity();
        entity.setClaimId(dto.getClaimId());
        entity.setPolicyId(dto.getPolicyId());
        entity.setUserId(dto.getUserId());
        entity.setAccidentTime(dto.getAccidentTime());
        entity.setReasonAttrId(dto.getReasonAttrId());
        entity.setHospitalName(dto.getHospitalName());
        entity.setTreatmentTime(dto.getTreatmentTime());
        entity.setDiagnosisResult(dto.getDiagnosisResult());
        entity.setTreatmentAmount(dto.getTreatmentAmount());
        entity.setBankName(dto.getBankName());
        entity.setBankAccount(dto.getBankAccount());
        entity.setAccountName(dto.getAccountName());
        entity.setClaimMaterials(dto.getClaimMaterials());
        entity.setMaterialCount(dto.getMaterialCount());
        entity.setStatusAttrId(dto.getStatusAttrId());
        
        return this.updateById(entity);
    }

    @Override
    public ClaimVO queryClaimById(Integer claimId) {
        // 根据 ID 查询索赔详情（关联查询保单、用户、字典信息）
        return this.baseMapper.selectWithRelations(claimId);
    }

    @Override
    public IPage<ClaimVO> pageQueryClaims(ClaimQueryDTO dto, Page<ClaimVO> page) {
        // 分页查询索赔列表
        return this.baseMapper.selectPage(page, dto);
    }

    @Override
    public boolean changeStatus(Integer claimId, Integer statusAttrId, String operator) {
        // 变更索赔状态，需记录操作日志（若有）并校验状态流转规则
        ClaimInfoEntity entity = new ClaimInfoEntity();
        entity.setClaimId(claimId);
        entity.setStatusAttrId(statusAttrId);
        return this.updateById(entity);
    }
}